當(dāng)一個(gè)網(wǎng)站每天有數(shù)千個(gè)請(qǐng)求時(shí),底層基礎(chǔ)設(shè)施必須配備足夠的設(shè)備來(lái)處理如此龐大的流量。在服務(wù)器級(jí)別管理繁重網(wǎng)絡(luò)流量的優(yōu)化可以在兩個(gè)級(jí)別完成:
- 物理服務(wù)器
- 網(wǎng)絡(luò)應(yīng)用服務(wù)器
處理物理服務(wù)器上的大量流量負(fù)載有兩種主要方法:
1.線性縮放
投資一臺(tái)具有大量處理能力、內(nèi)存、硬盤空間和冗余的機(jī)器。這適用于具有許多靜態(tài)網(wǎng)頁(yè)的小型網(wǎng)站。例如:一個(gè)容量為 500 MHz 的處理器或一個(gè)操作系統(tǒng),它加載了一個(gè) web 服務(wù)器,比如 Apache。它通過(guò)可靠的連接連接到互聯(lián)網(wǎng),例如 E1(每秒 2 MB)或 E3(每秒 34 MB)。這個(gè)物理服務(wù)器每天可以處理成千上萬(wàn)的訪問者。
2.服務(wù)器的橫向擴(kuò)展和負(fù)載平衡:
無(wú)論服務(wù)器有多大,它們都有一個(gè)自然的硬限制。同樣適用于服務(wù)器上運(yùn)行的軟件(例如:Apache)。虛擬專用服務(wù)器或?qū)S梅?wù)器托管計(jì)劃最適合擁有大量日常用戶的網(wǎng)站。負(fù)載平衡是指在稱為服務(wù)器池的一組后端服務(wù)器之間有效分配傳入網(wǎng)絡(luò)流量。創(chuàng)建更多服務(wù)器并平衡服務(wù)器之間的負(fù)載是管理峰值負(fù)載的最佳解決方案。
負(fù)載均衡器會(huì)立即執(zhí)行以下功能:
- 跨多個(gè)服務(wù)器資源分配客戶端請(qǐng)求或網(wǎng)絡(luò)負(fù)載。
- 通過(guò)僅向在線服務(wù)器發(fā)送請(qǐng)求來(lái)確保高可用性和可靠性。
- 提供根據(jù)需求增加或減少服務(wù)器的靈活性。
讓我們更詳細(xì)地了解如何處理 Web 服務(wù)器的高負(fù)載。
1.處理對(duì)網(wǎng)絡(luò)域的請(qǐng)求
- 域名服務(wù)器 (DNS) 可以減輕負(fù)載。(DNS,一種將域名轉(zhuǎn)換為 IP 地址的互聯(lián)網(wǎng)服務(wù))。服務(wù)器每次收到請(qǐng)求時(shí),DNS 都會(huì)以循環(huán)方式輪換可用的 IP 地址以分配和分擔(dān)負(fù)載。每個(gè)服務(wù)器都可以訪問同一網(wǎng)站的頁(yè)面。
- 負(fù)載可以通過(guò)開關(guān)分配。對(duì)網(wǎng)站的請(qǐng)求是向機(jī)器發(fā)出的。然后將其傳遞到可用服務(wù)器之一。使用這種方法的主要優(yōu)點(diǎn)是冗余。即使其中一臺(tái)服務(wù)器出現(xiàn)故障,其他機(jī)器仍將繼續(xù)工作,并且網(wǎng)站始終可以訪問。這里的另一個(gè)優(yōu)點(diǎn)是容量可以以增量方式增加。
2.自動(dòng)縮放
自動(dòng)縮放是云計(jì)算中的一個(gè)過(guò)程,可確保有正確數(shù)量的實(shí)例可用于處理當(dāng)前應(yīng)用程序的負(fù)載。它會(huì)在高流量期間自動(dòng)增加實(shí)例數(shù)以保持服務(wù)器性能,并在流量消退時(shí)再次減少實(shí)例數(shù)。此功能可確保網(wǎng)站的可用性,并允許根據(jù)網(wǎng)絡(luò)流量自動(dòng)上升和下降。這最適合每小時(shí)、每天或每周使用變化的網(wǎng)站。
3.優(yōu)化數(shù)據(jù)庫(kù)服務(wù)器設(shè)置
每天都有用戶發(fā)表新評(píng)論,網(wǎng)站所有者添加新頁(yè)面,修改或刪除舊頁(yè)面以及添加或刪除列出的產(chǎn)品。此類活動(dòng)會(huì)在數(shù)據(jù)庫(kù)表中創(chuàng)建“漏洞”。這些是數(shù)據(jù)條目被刪除但從未填充的空白。這種間隙會(huì)造成碎片并導(dǎo)致更長(zhǎng)的提取時(shí)間。如果數(shù)據(jù)庫(kù)有超過(guò) 5% 的空間作為“漏洞”,則必須對(duì)其進(jìn)行修復(fù)。多表連接、慢查詢和其他低效調(diào)用通常會(huì)對(duì)應(yīng)用服務(wù)器性能產(chǎn)生重大影響,需要定期優(yōu)化。
一些經(jīng)常修改的數(shù)據(jù)庫(kù)設(shè)置是:
max_connections – 此設(shè)置通常用于防止單個(gè)用戶在多用戶服務(wù)器環(huán)境中控制整個(gè)服務(wù)器。在負(fù)載較重的共享服務(wù)器中,該值最小可以設(shè)置為 10,在專用服務(wù)器中,可以設(shè)置為 250。
innodb_buffer_pool_size – 查詢結(jié)果通常存儲(chǔ)在稱為“緩沖池”的內(nèi)存區(qū)域中,以便使用 InnoDB 在 MySQL 數(shù)據(jù)庫(kù)中進(jìn)行快速訪問。該值設(shè)置在 MySQL 可用 RAM 的 50-70% 之間。
key_buffer_size – 它決定了 MyISAM 表的緩存大小。這大約設(shè)置為 MySQL 可用內(nèi)存的 20%。
query_cache_size – 此選項(xiàng)僅對(duì)單個(gè)網(wǎng)站服務(wù)器啟用,其值設(shè)置為 10 MB 或更少,具體取決于當(dāng)前查詢的速度。
4.監(jiān)控性能并微調(diào) Web 服務(wù)器
跟蹤 KPI(包括通過(guò)服務(wù)臺(tái)、客戶服務(wù)等獲得的軼事/定性客戶反饋)以確保網(wǎng)站的最佳性能。對(duì)于高流量網(wǎng)站,最好定期審核 Web 服務(wù)器。下面提到了一些設(shè)置:
超時(shí):此設(shè)置確定 Web 服務(wù)器將等待用戶發(fā)送請(qǐng)求的時(shí)間。該值是根據(jù)服務(wù)器流量設(shè)置的。在繁忙的服務(wù)器中,它設(shè)置為 120 秒。通常,始終建議將此值保持在盡可能低的水平,以避免資源浪費(fèi)。
KeepAlive:如果KeepAlive設(shè)置為 ON,則 Web 服務(wù)器使用單個(gè)連接傳輸所有文件以加載頁(yè)面。這可以防止需要為加載每個(gè)文件建立新的連接。這在繁忙的交通日節(jié)省了大量時(shí)間。
MaxKeepAliveRequests –此設(shè)置確定可以通過(guò) KeepAlive 連接傳輸?shù)奈募?shù)量。除資源限制等情況外,將此設(shè)置為“無(wú)限”。
MaxClients – 它指示在 Web 服務(wù)器中,可以同時(shí)為多少訪問者提供服務(wù)。過(guò)高的值會(huì)造成資源浪費(fèi),過(guò)低的值會(huì)導(dǎo)致訪客流失。根據(jù)訪問者群將其設(shè)置為理想值。
MinSpareServers 和 MaxSpareServers – 應(yīng)用程序服務(wù)器保留一些“工作人員”處于待命狀態(tài),以處理突然激增的請(qǐng)求。如果您的站點(diǎn)容易出現(xiàn)訪問高峰,請(qǐng)將這些變量配置為適當(dāng)?shù)南拗啤?/p>
HostnameLookups – 應(yīng)用程序服務(wù)器可能會(huì)嘗試找出連接到它的每個(gè) IP 的主機(jī)名,這可能會(huì)導(dǎo)致資源浪費(fèi)。為防止出現(xiàn)這種情況,請(qǐng)將 HostnameLookups 設(shè)置為“0”。
5. 開啟 HTTP/2
HTTP/2 是最新版本,包含很多性能改進(jìn)。它通過(guò)以下方式改進(jìn)服務(wù)器響應(yīng)時(shí)間:
- 使用單個(gè)連接而不是耗時(shí)的并行連接來(lái)傳輸文件。
- 首先傳輸關(guān)鍵文件以完成頁(yè)面。
- 使用壓縮更快地傳輸標(biāo)頭。
- 使用二進(jìn)制數(shù)據(jù)代替龐大的文本數(shù)據(jù)傳輸。
- 在瀏覽器請(qǐng)求頁(yè)面之前推送加載頁(yè)面所需的所有文件。它在使用多個(gè) CSS、JS 和圖像(基本上都是現(xiàn)代網(wǎng)站)的網(wǎng)站中節(jié)省了寶貴的時(shí)間。
HTTP/2 需要使用 SSL,這使網(wǎng)站在默認(rèn)情況下是安全的。
6.Web 服務(wù)器緩存
NGINX 等工具為網(wǎng)站提供了擴(kuò)展高流量趨勢(shì)的能力。為了處理動(dòng)態(tài)和靜態(tài) Web 服務(wù)器請(qǐng)求,NGINX 與主服務(wù)器一起配置,NGINX 充當(dāng)反向代理。憑借其獨(dú)特的處理能力,該工具可以用有限的資源處理大量連接。作為單線程服務(wù)器,即使在高流量的時(shí)候,內(nèi)存和 CPU 的使用也保持相對(duì)穩(wěn)定。在使用 NGINX 作為反向代理的服務(wù)器上使用 Engintron(cPanel 插件),進(jìn)一步提高了高峰流量時(shí)的服務(wù)器性能。
NGINX 充當(dāng)用于 Web 服務(wù)、反向代理、緩存、負(fù)載平衡和媒體流的開源軟件。它還可以用作電子郵件(IMAP、POP3)的代理服務(wù)器,以及用作 HTTP、TCP 和 UDP 服務(wù)器的反向代理、負(fù)載平衡器。在使用緩存時(shí),網(wǎng)站速度和內(nèi)容新鮮度之間總是需要權(quán)衡,需要在這兩者之間建立完美的平衡。
7.更強(qiáng)大的數(shù)據(jù)庫(kù)服務(wù)器/網(wǎng)絡(luò)服務(wù)器
某些應(yīng)用程序需要為其數(shù)據(jù)庫(kù)服務(wù)器提供更多容量。在這種情況下,在 CPU 和 RAM 方面分配更多資源將有助于網(wǎng)站在流量大幅增加的情況下更順暢地運(yùn)行。一些數(shù)據(jù)庫(kù)服務(wù)器需要自己的裸機(jī)(裸機(jī)是指服務(wù)器擁有自己的硬件,專為單個(gè)客戶端構(gòu)建和使用)與輕量級(jí)虛擬 Web 服務(wù)器結(jié)合使用。示例包括 MS SQL Server。同樣,高流量網(wǎng)站也通過(guò)向 Web 服務(wù)器添加計(jì)算和內(nèi)存資源來(lái)獲得更高的速度和更高的性能。
8.對(duì)靜態(tài)對(duì)象使用 CDN
網(wǎng)站上的視頻或圖像通常被定義為靜態(tài)對(duì)象。使用 CDN 為靜態(tài)對(duì)象提供服務(wù)將減少主 Web 服務(wù)器的壓力,這也有助于提高性能。在高流量網(wǎng)站的情況下,CDN 跨多個(gè)服務(wù)器緩存靜態(tài)文件,并從離每個(gè)訪問者最近的位置傳送它們,以盡可能消除時(shí)間延遲。CDN 通常與標(biāo)準(zhǔn)托管平臺(tái)結(jié)合使用,是實(shí)現(xiàn)性能最大化的關(guān)鍵解決方案之一。
9.數(shù)據(jù)庫(kù)緩存
網(wǎng)站性能不佳的主要原因之一是與數(shù)據(jù)庫(kù)性能相關(guān)的問題。電子商務(wù)網(wǎng)站就是此類問題的典型例子。許多內(nèi)容在整個(gè)網(wǎng)站上保持靜態(tài)或統(tǒng)一,不需要每次都被請(qǐng)求。緩存此類內(nèi)容可消除瀏覽器和Web 服務(wù)器之間的大量請(qǐng)求。
Memcache 和 Redis 等緩存工具提供了顯著的性能提升,可以幫助高流量網(wǎng)站在高負(fù)載下運(yùn)行。這些工具通過(guò)在 RAM 中緩存數(shù)據(jù)和對(duì)象來(lái)加速數(shù)據(jù)庫(kù)驅(qū)動(dòng)的網(wǎng)站,以最大限度地減少需要讀取外部數(shù)據(jù)源的出現(xiàn)次數(shù)。
下面列出了通過(guò)控制 Web 服務(wù)器上的負(fù)載來(lái)處理大量流量的網(wǎng)站服務(wù)器的更多優(yōu)化技術(shù):
1.足夠帶寬的可用性和資源密集型服務(wù)的禁用。
必須確保高流量網(wǎng)站有足夠的帶寬。借助 LINX、LoNAP 和 INEX 等工具,可以輕松診斷流量瓶頸。監(jiān)控服務(wù)器上所有啟用的服務(wù)并禁用那些未使用的設(shè)置。這個(gè)未使用的服務(wù)消耗了大量的 CPU 和內(nèi)存。對(duì)于資源繁重的服務(wù),夜間最適合在流量最小的情況下執(zhí)行備份。將硬盤升級(jí)到 SSD 存儲(chǔ)(至少對(duì)于數(shù)據(jù)庫(kù)分區(qū))可以將加載時(shí)間減少大約 10%。
2.讓內(nèi)容更貼近觀眾
數(shù)據(jù)離用戶越近,用戶使用網(wǎng)站的速度就越快。用戶使用網(wǎng)站的速度越快,該網(wǎng)站可以為更多的用戶提供服務(wù)。在快速增長(zhǎng)的網(wǎng)站中,將網(wǎng)站拆分成多個(gè)節(jié)點(diǎn)可以帶來(lái)性能和容量的快速提升。高流量網(wǎng)站從主要互聯(lián)網(wǎng)市場(chǎng)的多個(gè)交付網(wǎng)站得到顯著改善。
3.網(wǎng)絡(luò)基礎(chǔ)應(yīng)該完好無(wú)損
網(wǎng)絡(luò)基礎(chǔ)知識(shí)應(yīng)始終保持不變,以確保在快速增長(zhǎng)的網(wǎng)站的情況下性能流暢。如果將開關(guān)設(shè)置為 100 MB 而不是 1 GB,或者防火墻設(shè)置不必要地檢查導(dǎo)致關(guān)鍵性能問題的流量,則設(shè)計(jì)良好的網(wǎng)站仍然會(huì)失敗。完整地保留網(wǎng)絡(luò)基礎(chǔ)在服務(wù)高性能網(wǎng)站方面起著至關(guān)重要的作用。
4.分片
分片是跨多臺(tái)機(jī)器存儲(chǔ)數(shù)據(jù)記錄以滿足數(shù)據(jù)增長(zhǎng)需求的方法。跨多個(gè)節(jié)點(diǎn)/集群進(jìn)行分片可提高網(wǎng)站的性能。例如:MongoDB。
5.簡(jiǎn)化網(wǎng)站設(shè)計(jì)
具有大量腳本或媒體的網(wǎng)頁(yè)更可能加載緩慢。因此,對(duì)于需要圖像、腳本、視頻和動(dòng)態(tài)內(nèi)容的網(wǎng)站,需要采取額外措施來(lái)確保良好的性能。
- 縮小腳本以刪除不必要的字符。
- 使用圖像優(yōu)化器上傳媒體文件。
- 指定要顯示的圖像尺寸 (srcset)。
- 將所有 CSS 合并到一個(gè)文件中。
- 需要使用延遲加載選項(xiàng)來(lái)按需加載圖像,而不是一次加載。
- 最小化或使用輕量級(jí)插件或 CMS 平臺(tái)。
- 盡可能避免使用重定向。
- 檢測(cè)并修復(fù)損壞或失效的鏈接。